﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Praxis.Entities;
using Praxis.BusinessLogic;
using Microsoft.Practices.Unity;

namespace Praxis.UI
{
    public partial class FrmMttoAlquiler : Form
    {

        [Dependency]
        public IEquipoBL equipoBL { get; set; }

        [Dependency]
        public IClienteBL clienteBL { get; set; }

        [Dependency]
        public IObraBL obraBL { get; set; }

        [Dependency]
        public IAlquilerBL alquilerBL { get; set; }

        bool isNew = true;

        public FrmMttoAlquiler()
        {
            InitializeComponent();
            this.BuildUp();
        }

        public void Nuevo()
        {
            isNew = true;
            aLQUILERBindingSource.AddNew();
        }
        private void FrmMttoAlquiler_Load(object sender, EventArgs e)
        {
            eQUIPOBindingSource.DataSource = equipoBL.GetAllEquiposD();

            aLQUILERBindingSource.AddNew();
        }

        private void BtnGenerarComp_Click(object sender, EventArgs e)
        {
            var currentAlquiler = aLQUILERBindingSource.Current as ALQUILER;

            if (currentAlquiler != null)
            {
                FrmNumComp frm = new FrmNumComp();
                frm.currentAlquiler = currentAlquiler;
                frm.ShowDialog();
                gbDatos.Enabled = false;
                gbERelacionados.Enabled = false;
                gbDetalle.Enabled = false;
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var alquiler = aLQUILERBindingSource.Current as ALQUILER;

            if (alquiler != null)
            {
                try
                {
                    if (isNew)
                    {
                        alquilerBL.AddAlquiler(alquiler);
                        isNew = false;
                    }
                    else
                    {
                        alquilerBL.UpdateAlquiler(alquiler);
                        UpdateAlquiler(alquiler.Codigo);
                    }
                    MessageBox.Show("ALQUILER GUARDADO CON EXITO");
                }
                catch (Exception ex)
                {

                    MessageBox.Show(this, ex.Message,
                        "Mensaje",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);
                    
                }
            }
        }

        public void UpdateAlquiler(Int32 id)
        {
            isNew = false;

            var alquiler = alquilerBL.GetAlquilerById(id);

            aLQUILERBindingSource.DataSource = alquiler;
        }

        private void btnBusRucDni_Click(object sender, EventArgs e)
        {
            CargarCliente();

        }

        private void CargarCliente()
        {
            FrmCliente frmCliente = new FrmCliente();
            frmCliente.ShowDialog();
            

            if (frmCliente.CurrentCliente != null)
            {
                var nuevoCli = clienteBL.GetFromClienteById(frmCliente.CurrentCliente.Codigo);
                var alquiler = aLQUILERBindingSource.Current as ALQUILER;
                alquiler.CLIENTE = nuevoCli;
                alquiler.CodigoCliente = nuevoCli.Codigo;
                aLQUILERBindingSource.ResetBindings(true);
            }
        }


        private void btnBusObra_Click(object sender, EventArgs e)
        {
            CargarObra();
        }

        private void CargarObra()
        {
            FrmObra frmObra = new FrmObra();
            frmObra.ShowDialog();
            var nuevaObra = obraBL.GetFromObraById(frmObra.CurrentObra.Codigo);

            if (frmObra.CurrentObra != null)
            {
                var alquiler = aLQUILERBindingSource.Current as ALQUILER;
                alquiler.OBRA = nuevaObra;
                alquiler.CodigoObra = nuevaObra.Codigo;
                aLQUILERBindingSource.ResetBindings(true);
            }
        }

        private void btnBusDescripcion_Click(object sender, EventArgs e)
        {
            FrmEquipos frm = new FrmEquipos();
            frm.Show();
        }

        private void TxtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                eQUIPOBindingSource.DataSource = equipoBL.GetAllEquipoByDescripcionD(TxtDescripcion.Text);
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            var equipo = eQUIPOBindingSource.Current as EQUIPO;
            var currentAlquiler = aLQUILERBindingSource.Current as ALQUILER;

            if (equipo != null)
            {
                var detalle = new DETALLE_ALQUILER
                {
                    CodigoAlquiler = currentAlquiler.Codigo,
                    CodigoEquipo = equipo.Codigo,
                    EQUIPO = equipo,
                    NumHoras = 1,
                    Monto = equipo.PrecioPorHora
                };

                var existe = currentAlquiler.DETALLE_ALQUILER.Where(dp => dp.EQUIPO.Codigo.Equals(equipo.Codigo)).SingleOrDefault();

                if (existe == null)
                {
                    currentAlquiler.DETALLE_ALQUILER.Add(detalle);

                    currentAlquiler.Monto =
                        currentAlquiler.DETALLE_ALQUILER.Sum(dp => dp.Monto);
                }
                /*else
                {
                    var rpt = MessageBox.Show(this,
                        string.Format("El producto: {0}," +
                        "ya se encuentra el equipo, desea agregar otro?", equipo.Nombre),
                        "Mensaje",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        existe.Monto++;

                        currentAlquiler.Monto =
                            currentAlquiler.DETALLE_ALQUILER.Sum(dp => dp.Monto);
                    }
                }*/
                quitar();
                aLQUILERBindingSource.ResetBindings(true);
                dETALLE_ALQUILERBindingSource.ResetBindings(true);
            }
        }
        public void quitar()
        {
            eQUIPOBindingSource.RemoveCurrent();
        }
        private void dETALLE_ALQUILERDataGridView_CellValueChanged_1(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 1 || e.ColumnIndex == 2)
            {
                CalcularTotal();
            }
        }

        private void CalcularTotal()
        {
            var alquiler = aLQUILERBindingSource.Current as ALQUILER;

            if (alquiler != null)
            {
                alquiler.Monto = alquiler.DETALLE_ALQUILER.Sum(dp => dp.Monto);

                aLQUILERBindingSource.ResetBindings(true);
            }
        }

        private void btnQuitar_Click(object sender, EventArgs e)
        {
            var detalle = dETALLE_ALQUILERBindingSource.Current as DETALLE_ALQUILER;

                dETALLE_ALQUILERBindingSource.RemoveCurrent();
                detalle.EQUIPO.Disponible = true;
                eQUIPOBindingSource.DataSource = equipoBL.GetAllEquiposD();
                CalcularTotal();

        }

        private void rucDniTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            /*if (e.KeyCode == Keys.Enter)
            {
                var cliente = clienteBL.GetAllFromClienteByRucDni(rucDniTextBox.Text);
                var cli = aLQUILERBindingSource.Current as ALQUILER;

                if (cliente != null)
                {
                    cli.CLIENTE.NombreRazonSocial = cliente.NombreRazonSocial;
                    cli.CLIENTE.RucDni = cliente.RucDni;
                    aLQUILERBindingSource.ResetBindings(true);
                }
                else
                {
                    MessageBox.Show("Cliente no Registrado", "Mensaje", MessageBoxButtons.OK);
                }
            }*/
            
        }


        }
    }



